<html>
 <head>
  <meta charset="UTF-8">
 </head>
 <body>
  <h1 data-lake-id="iYMKC" id="iYMKC"><span data-lake-id="ue72544b9" id="ue72544b9">典型回答</span></h1>
  <p data-lake-id="u58c25390" id="u58c25390"><br></p>
  <p data-lake-id="u61344829" id="u61344829"><span data-lake-id="u99d37b45" id="u99d37b45">技术选型，没有最好，只有更合适。</span></p>
  <p data-lake-id="ubd2c6787" id="ubd2c6787"><span data-lake-id="ue74cdc13" id="ue74cdc13">​</span><br></p>
  <p data-lake-id="ua4397303" id="ua4397303"><span data-lake-id="u6c239d24" id="u6c239d24">当我们要做技术选型的时候，通常需要考虑很多因素，然后在总和对比各个因素，最终选择一个相对比较合适的技术方案。</span></p>
  <p data-lake-id="u9b2cf767" id="u9b2cf767"><span data-lake-id="ue63a2e4b" id="ue63a2e4b">​</span><br></p>
  <p data-lake-id="ub8aa72de" id="ub8aa72de"><span data-lake-id="ue5d3b004" id="ue5d3b004">一般需要考虑以下几个因素：</span></p>
  <p data-lake-id="u1c6760d2" id="u1c6760d2"><span data-lake-id="u30f7ad8b" id="u30f7ad8b">​</span><br></p>
  <p data-lake-id="uaefdfd21" id="uaefdfd21"><span data-lake-id="u691c323d" id="u691c323d">首先就是看一个工具、或者框架的</span><strong><span data-lake-id="u37cd4d1c" id="u37cd4d1c">功能是否能够满足业务、技术需求</span></strong><span data-lake-id="u12ca548b" id="u12ca548b">，这是一个大的前提，如果不能满足需求，有再多的优点都没用。而满足需求又分为多个方面，一个是当前的需求，一个是未来可能会需要的需求，所以这就需要开发者或者架构师仔细去对比各个方案的功能列表，从中选择更加适合自己团队的。</span></p>
  <p data-lake-id="u6f9f6d05" id="u6f9f6d05"><span data-lake-id="uee04275f" id="uee04275f">​</span><br></p>
  <p data-lake-id="u166a9515" id="u166a9515"><span data-lake-id="ua2b11844" id="ua2b11844">功能符合的话，其次还要看这个</span><strong><span data-lake-id="u4b156139" id="u4b156139">技术使用的人多不多</span></strong><span data-lake-id="ufa9af055" id="ufa9af055">，如果用的人多，那么当我们使用过程中，遇到问题的话，就能很快的找到答案。</span></p>
  <p data-lake-id="uc234c79b" id="uc234c79b"><span data-lake-id="ud7605f5f" id="ud7605f5f">​</span><br></p>
  <p data-lake-id="ud743af8a" id="ud743af8a"><span data-lake-id="u53db4459" id="u53db4459">一般来说，用的人多的技术，bug就少一些，</span><strong><span data-lake-id="uddca246d" id="uddca246d">开源社区</span></strong><span data-lake-id="u4428002a" id="u4428002a">也更加活跃一些，那么，他的</span><strong><span data-lake-id="uab04cc2b" id="uab04cc2b">更新迭代速度</span></strong><span data-lake-id="ua08ff392" id="ua08ff392">，以及</span><strong><span data-lake-id="u710bbf10" id="u710bbf10">问题的解决速度</span></strong><span data-lake-id="u3a1471e2" id="u3a1471e2">也就更快一些。这些对于生产环境中使用某个技术来说还是比较重要的。</span></p>
  <p data-lake-id="u3fc46ba2" id="u3fc46ba2"><span data-lake-id="ud3bc290e" id="ud3bc290e">​</span><br></p>
  <p data-lake-id="u4f08f210" id="u4f08f210"><span data-lake-id="uf85b3cf9" id="uf85b3cf9">提到bug，这就需要考虑一个技术在非功能性需求以外的一些基本要求，比如</span><strong><span data-lake-id="u181f562b" id="u181f562b">可扩展性、安全性、性能等</span></strong><span data-lake-id="ub137bbbd" id="ub137bbbd">，这些可能在短期影响不大，但是随着业务的逐渐增长，这些都可能成为瓶颈。</span></p>
  <p data-lake-id="ubecc7b8c" id="ubecc7b8c"><span data-lake-id="u5a10e393" id="u5a10e393">​</span><br></p>
  <p data-lake-id="ub341e10a" id="ub341e10a"><span data-lake-id="u08bf6ee9" id="u08bf6ee9">另外，在成本上也是需要重点考量的，成本包括很多，</span><strong><span data-lake-id="ucfd2fa0c" id="ucfd2fa0c">使用成本、学习成本、迁移成本、维护成本</span></strong><span data-lake-id="uc3db0d20" id="uc3db0d20">等等，不仅仅眼前要付费的叫成本，人员的上手速度、后期的迭代维护，这些都是成本。有很多东西，用起来免费，但是学习成本很高，后期问题也多，那也并不一定是最佳选择。</span></p>
  <p data-lake-id="ub37c800a" id="ub37c800a"><span data-lake-id="ufd724fe3" id="ufd724fe3">​</span><br></p>
  <p data-lake-id="u71215ac3" id="u71215ac3"><span data-lake-id="ue9802db9" id="ue9802db9">还有一点也很重要，那就是引入的这项新技术或者框架，</span><strong><span data-lake-id="u3fe1044f" id="u3fe1044f">和公司内部现有技术体系的匹配度</span></strong><span data-lake-id="ud5b484f5" id="ud5b484f5">怎样么？不能说全公司都用kafka，你非要用rocketmq吧？</span></p>
  <p data-lake-id="u034e07df" id="u034e07df"><span data-lake-id="ua16e3452" id="ua16e3452">​</span><br></p>
  <p data-lake-id="u3080d73e" id="u3080d73e"><span data-lake-id="ud359c088" id="ud359c088">所以说，做一个技术选型，需要在：功能性、非功能性需求、是否足够成熟、使用的人多不多、开源社区是否活跃、学习成本，使用成本，维护成本，以及和现有技术的匹配度如何。</span></p>
 </body>
</html>